from typing import List

from llama_index.core.schema import Document, BaseNode
from llama_index.core.node_parser import SemanticSplitterNodeParser

from ..node_parser_interface import NodeParserInterface
from ...embedding import EmbeddingInterface
from .semantic_splitter_config import SemanticSplitterConfig


class SemanticSplitterParser(NodeParserInterface):
    """
    一个实现了 NodeParserInterface 的、基于语义的节点解析器。
    它封装了 LlamaIndex 的 SemanticSplitterNodeParser。
    """

    def __init__(self, config: SemanticSplitterConfig, embedding_service: EmbeddingInterface):
        
        # 核心改动：不再自己创建模型，而是依赖注入的 embedding_service
        # 通过 get_native_model() 获取底层的 LlamaIndex 模型对象
        embed_model = embedding_service.get_native_model()
        
        self._parser = SemanticSplitterNodeParser(
            buffer_size=config.buffer_size,
            breakpoint_percentile_threshold=config.breakpoint_percentile_threshold,
            embed_model=embed_model,
            include_prev_next_rel=config.include_prev_next_rel,
        )

    def parse_nodes(self, documents: List[Document]) -> List[BaseNode]:
        """
        使用配置好的 SemanticSplitterNodeParser 来执行节点解析。
        """
        return self._parser.get_nodes_from_documents(documents) 